package com.hr.mapper;

import com.hr.domain.dto.AiHouseDTO;
import com.hr.domain.po.House;
import com.hr.domain.query.HouseQueryParams;
import com.hr.domain.vo.AiHouseVO;
import com.hr.domain.vo.HouseVO;
import com.hr.domain.vo.UserHouseDetails;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
* @author 86150
* @description 针对表【house(房源表)】的数据库操作Mapper
* @createDate 2025-09-23 14:20:06
* @Entity com.hr.domain.po.House
*/
@Mapper
public interface HouseMapper{

    /**
     * 获取所有房屋信息
     * @return List<HouseVO>
     */
    List<HouseVO> getHouseList();

    /**
     * 获取房屋分页列表
     * @param queryParams 查询参数
     * @return List<HouseVO>
     */
    List<HouseVO> getHousePageList(HouseQueryParams queryParams);

    /**
     * 更新房屋状态
     * @param id 房屋id
     * @param status 状态
     * @return int
     */
    @Update("update house set status = #{status} where id = #{id}")
    int updateHouseStatus(@Param("id") Long id,@Param("status") Integer status);

    /**
     * 新增房屋信息
     * @param house 房屋信息
     * @return int
     */
    @Update("insert into house(title,address,area,rent,payment_type,landlord_id,publish_time,status,orientation,description) " +
    "values(#{title},#{address},#{area},#{rent},#{paymentType},#{landlordId},#{publishTime},#{status},#{orientation},#{description})")
    int insert(House house);

    /**
     * 获取所有地址
     * @return List<House>
     */
    @Select("select address from house")
    List<House> selectAllAddress();

    /**
     * 删除房屋信息
     * @param id 房屋id
     * @return int
     */
    @Update("delete from house where id = #{id}")
    int deleteHouseById(Integer id);

    /**
     * 获取所有朝向
     * @return List<String>
     */
    @Select("select orientation from house")
    List<String> selectAllOrientation();

    /**
     * 修改房屋租金
     * @param id 房屋id
     * @param rent 租金
     * @return int
     */
    @Update("update house set rent = #{rent} where id = #{id}")
    int updateHouseRent(@Param("id") Long id, @Param("rent") Double rent);

    /**
     * 获取所有房屋id
     * @return List<Long>
     */
    @Select("select id from house order by id")
    List<Long> getAllHouseId();

    /**
     * 修改房屋信息
     * @param house 房屋信息
     * @return int
     */
    int update(House house);

    /**
     * 根据id获取房屋信息
     * @param id 房屋id
     * @return HouseVO
     */
    HouseVO getHouseById(Long id);

    /**
     * 批量删除房屋信息
     * @param ids 房屋id列表
     * @return int
     */
    int deleteBatchHouse(@Param("ids") List<Long> ids);

    /**
     * 获取房屋详情
     * @param houseId 房屋id
     * @return UserHouseDetails
     */
    UserHouseDetails getHouseDetailsById(Long houseId);

    /**
     * 获取房屋详情
     * @param aiHouseDTO 房屋详情
     * @return UserHouseDetails
     */
    List<AiHouseVO> getHouseDetailsForAi(AiHouseDTO aiHouseDTO);
}




